#循环查询系统
def search_system(v1=3, v2=6):
    '''适用pp版本号：3.93 9.07'''

    #将108张表的txt文档路径添加到列表path中
    path = []
    for i in range(109):
        path.append('D:/Python_Files/pp/{}.txt'.format(i))
        
    #列表delete存储需要去掉的字符
    delete = ['{', '}', '_', ',', '[', ']', '\n', ' ', ':', '"',\
              '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    letters = [chr(x) for x in range(ord('a'), ord('z') + 1)]#26个小写字母
    delete.extend(letters)

    #p_dict是转换字典，需要填写一些先验的标记，以辅助判断
    p_dict = {0: '患者基本信息',
              1: '患者院内基本信息',
              2: '住院病案首页（++）',
              3: '临床版住院病案首页（新增）',
              4: '就诊信息（诊断 +）',
              5: '转科历史',
              6: '转床记录',
              7: '科室就诊信息（+）',
              8: '诊断记录（+）',
              9: '医疗发票记录（费用）',
              10: '医疗费用明细信息（费用）',
              11: '中西医处方（outpatient 用药 +）',
              12: '药品类医嘱（inpatient 用药 +）',
              13: '草药处方（用药）',
              14: '药品医嘱执行记录（用药）',
              15: '门急诊发药（outpatient 用药 +）',
              16: '住院发药（用药 +）',
              17: '化疗记录',
              18: '非药品医嘱',
              19: '检查申请单',
              20: '检查记录',
              21: '肺功能检查报告',
              22: '检验记录（+）',
              23: '染色体核型分析报告',
              24: '染色体FISH分析报告',
              25: '基因检测报告',
              26: 'HLA基因分型报告',
              27: '骨髓穿刺记录',
              28: '病理申请单',
              29: '病理记录',
              30: '手术申请预约',
              31: '手术记录（+）',
              32: '麻醉前访视记录',
              33: '麻醉术后访视记录',
              34: '术后镇痛观察记录',
              35: '手术麻醉主记录（++）',
              36: '手术用药记录（+）',
              37: '手术观察记录',
              38: '手术事件记录',
              39: '体外循环记录',
              40: '输血申请单',
              41: '输血观察记录',
              42: '输血评价记录',
              43: '输血不良反应上报记录',
              44: '放疗记录（+）',
              45: '放疗记录v2',
              46: '放疗汇总记录',
              47: '评分记录',
              48: '病情记录',
              49: '出入量',
              50: '护理观察',
              51: '生命体征测量记录（+）',
              52: '护理记录',
              53: '管路管理',
              54: '入院评估记录',
              55: '出院评估及指导记录',
              56: '护理计划',
              57: '护理不良事件报告',
              58: '压疮护理报告',
              59: '分娩记录',
              60: '入院记录（+）',
              61: '24小时内入出院记录（+）',
              62: '24小时内入院死亡记录（+）',
              63: '首次病程记录',
              64: '日常病程记录（+）',
              65: '上级查房记录（+）',
              66: '转科记录（+）',
              67: '抢救记录',
              68: '会诊记录',
              69: '有创诊疗操作记录',
              70: '疑难危重病例讨论记录',
              71: '交接班记录',
              72: '阶段小结',
              73: '术前小结',
              74: '术前讨论',
              75: '术后首次病程记录（+）',
              76: '死亡病例讨论记录',
              77: '死亡记录（+）',
              78: '出院小结（+）',
              79: '出院记录（++）',
              80: '临床路径',
              81: '检查类医嘱（+）',
              82: '检验类医嘱（+）',
              83: '处置类医嘱（+）',
              84: '输血类医嘱',
              85: '手术类医嘱（+）',
              86: '门急诊病历',
              87: '门急诊抢救记录',
              88: '门急诊观察（检查）',
              89: '院内感染登记',
              90: '器械治疗院感监测',
              91: '手术切口院感监测',
              92: '随访方案',
              93: '随访结果',
              94: '胸外科手术申请预约',
              95: '胸外科体外循环记录',
              96: '胸外科手术麻醉主记录',
              97: '胸外科手术方法详细记录',
              98: '胸外科ICU记录',
              99: '体检结果明细',
              100: '体检检验',
              101: '体检检查（+）',
              102: '体检总检结论',
              103: '生物样本信息',
              104: '病人维度统计信息',
              105: '随访全表',
              106: '用药全表（+）',
              107: '麻醉记录（+）',
              108: '诊断全表（outpatient +）'}
    p_dict = {key: str(key+1)+'.'+value for key, value in p_dict.items()}

    #构建精确查找的总查询字典
    total_dict = {}#total_dict存储最后的查询字典
    for p in range(len(path)):
        with open(path[p]) as f:
            data = f.readlines()

        data1 = []
        for i in range(len(data)):
            for j in delete:
                data[i] = data[i].replace(j, '')
            if data[i] != '':
                data1.append(data[i])

        for i in data1:
            if i in total_dict:
              if p_dict[p] not in total_dict[i]:
                   total_dict[i] = total_dict[i] + '  ' + p_dict[p]
            else:
                total_dict[i] = p_dict[p]
    
    #查询 
    while True:     
        x = input('输入关键词(version:3.93 9.07):')
        if x == 'q':
            break
        else:
            #version 1 精确查找
            print()
            print('按关键词和数据源名称匹配度：')
            blank_dict = {key:0 for key, value in total_dict.items()}
            for i in total_dict:
                count = 0
                for j in x:
                    if j in i:
                        count += 1
                blank_dict[i] = count
            #对字典排序
            temp = sorted([(value, key) for key, value in blank_dict.items()], reverse=True)
            #输出最匹配的前十个
            for i in temp[:v1]:
                print(i[0],':', total_dict[i[1]])

            print()
            
            #version 2
            print('按关键词和各表匹配度：')  
            total_dict_2 = {}
            for p in range(len(path)):
                with open(path[p]) as f:
                    data = f.readlines()
                #列表data1存储表下的所有数据源名称
                data1 = []
                for i in range(len(data)):
                    for j in delete:
                        data[i] = data[i].replace(j, '')
                    if data[i] != '':
                        data1.append(data[i])
                #统计匹配度
                count = 0
                for i in data1:
                    for j in x:
                        if j in i:
                            count += 1
                # #考虑增加惩罚项
                # num = 0
                # for i in data1:
                #     for j in i:
                #         num += 1 
                # #构建总查询字典
                # total_dict_2[p_dict[p+1]] = round(count/num, 4)
                total_dict_2[p_dict[p]] = count
            temp = sorted([(value, key) for key, value in total_dict_2.items()], reverse=True)
            for i in temp[:v2]:
                print(i[0],':', i[1])
            print('-end-')
     
